શું તમે સ્ટીકી હેડર્સ પાછળ છુપાઈ જતી એન્કર લિંક્સથી કંટાળી ગયા છો? CSS scroll-margin-top વિશે જાણો, જે પરફેક્ટ નેવિગેશન ઓફસેટ્સ માટે આધુનિક અને સ્વચ્છ ઉપાય છે.
એન્કર નેવિગેશનમાં નિપુણતા: CSS સ્ક્રોલ માર્જિન્સનો ઊંડાણપૂર્વક અભ્યાસ
આધુનિક વેબ ડિઝાઇનના વિશ્વમાં, એક સીમલેસ અને સાહજિક યુઝર એક્સપિરિયન્સ બનાવવું સર્વોપરી છે. આજે આપણે જોતા સૌથી સામાન્ય UI પેટર્નમાંથી એક સ્ટીકી અથવા ફિક્સ્ડ હેડર છે. જ્યારે યુઝર પેજ પર નીચે સ્ક્રોલ કરે છે ત્યારે તે પ્રાથમિક નેવિગેશન, બ્રાન્ડિંગ અને મુખ્ય કોલ્સ-ટુ-એક્શનને સતત સુલભ રાખે છે. આ પેટર્ન અત્યંત ઉપયોગી હોવા છતાં, તે એક ક્લાસિક, નિરાશાજનક સમસ્યા ઊભી કરે છે: છુપાયેલી એન્કર લિંક્સ.
તમે નિઃશંકપણે તેનો અનુભવ કર્યો હશે. તમે વિષયસૂચિમાં એક લિંક પર ક્લિક કરો છો, અને બ્રાઉઝર જવાબદારીપૂર્વક સંબંધિત વિભાગ પર જાય છે, પરંતુ વિભાગનું હેડિંગ સ્ટીકી નેવિગેશન બારની પાછળ સરસ રીતે છુપાઈ જાય છે. યુઝર સંદર્ભ ગુમાવે છે, દિશાહિન બને છે, અને તમે જે પોલિશ્ડ અનુભવ બનાવવા માટે સખત મહેનત કરી છે તે ક્ષણભર માટે તૂટી જાય છે. દાયકાઓથી, ડેવલપર્સે પેડિંગ, સ્યુડો-એલિમેન્ટ્સ અથવા જાવાસ્ક્રિપ્ટનો સમાવેશ કરતી વિવિધ હોશિયાર, છતાં અપૂર્ણ, હેક્સ સાથે આ સમસ્યાનો સામનો કર્યો છે.
સદભાગ્યે, હેક્સનો યુગ સમાપ્ત થઈ ગયો છે. CSS વર્કિંગ ગ્રુપે આ જ સમસ્યા માટે એક હેતુ-નિર્મિત, સુંદર અને મજબૂત ઉપાય પૂરો પાડ્યો છે: scroll-margin પ્રોપર્ટી. આ લેખ CSS સ્ક્રોલ માર્જિન્સને સમજવા અને તેમાં નિપુણતા મેળવવા માટે એક વ્યાપક માર્ગદર્શિકા છે, જે તમારી સાઇટના નેવિગેશનને નિરાશાના સ્ત્રોતમાંથી આનંદના બિંદુમાં પરિવર્તિત કરશે.
ક્લાસિક સમસ્યા: છુપાયેલ એન્કર ટાર્ગેટ
આપણે ઉપાયની ઉજવણી કરીએ તે પહેલાં, ચાલો સમસ્યાનું સંપૂર્ણ વિશ્લેષણ કરીએ. તે બે મૂળભૂત વેબ સુવિધાઓ વચ્ચેના સરળ સંઘર્ષમાંથી ઉદ્ભવે છે: ફ્રેગમેન્ટ આઇડેન્ટિફાયર્સ (એન્કર લિંક્સ) અને ફિક્સ્ડ પોઝિશનિંગ.
અહીં લાક્ષણિક દૃશ્ય છે:
- માળખું: તમારી પાસે વિશિષ્ટ વિભાગો સાથેનું એક લાંબુ-સ્ક્રોલિંગ પેજ છે. દરેક મુખ્ય વિભાગમાં એક અનન્ય `id` એટ્રિબ્યુટ સાથેનું હેડિંગ હોય છે, જેમ કે `
About Us
`. - નેવિગેશન: પેજની ટોચ પર, તમારી પાસે એક નેવિગેશન મેનૂ છે. આ વિષયસૂચિ અથવા મુખ્ય સાઇટ નેવિગેશન હોઈ શકે છે. તેમાં તે વિભાગ ID તરફ નિર્દેશ કરતી એન્કર લિંક્સ હોય છે, જેમ કે `અમારી કંપની વિશે જાણો`.
- સ્ટીકી એલિમેન્ટ: તમારી પાસે `position: sticky; top: 0;` અથવા `position: fixed; top: 0;` સાથે સ્ટાઈલ કરેલું હેડર એલિમેન્ટ છે. આ એલિમેન્ટની એક નિશ્ચિત ઊંચાઈ હોય છે, ઉદાહરણ તરીકે, 80 પિક્સેલ્સ.
- ક્રિયાપ્રતિક્રિયા: એક યુઝર "અમારી કંપની વિશે જાણો" લિંક પર ક્લિક કરે છે.
- બ્રાઉઝરનું વર્તન: બ્રાઉઝરનું ડિફોલ્ટ વર્તન પેજને સ્ક્રોલ કરવાનું છે જેથી ટાર્ગેટ એલિમેન્ટ (એટલે કે `id="about-us"` વાળું `
`) ની સૌથી ઉપરની ધાર વ્યુપોર્ટની ઉપરની ધાર સાથે સંપૂર્ણ રીતે સંરેખિત થાય.
- સંઘર્ષ: કારણ કે તમારું 80-પિક્સેલ-ઊંચું સ્ટીકી હેડર વ્યુપોર્ટની ટોચ પર જગ્યા રોકે છે, તે હવે બ્રાઉઝરે હમણાં જ સ્ક્રોલ કરીને દૃશ્યમાં લાવેલા `
` એલિમેન્ટને ઢાંકી દે છે. યુઝર હેડિંગની *નીચેની* સામગ્રી જુએ છે, પરંતુ હેડિંગ પોતે નહીં.
આ કોઈ બગ નથી; આ સિસ્ટમોને સ્વતંત્ર રીતે કામ કરવા માટે કેવી રીતે ડિઝાઇન કરવામાં આવી હતી તેનું તાર્કિક પરિણામ છે. સ્ક્રોલિંગ મિકેનિઝમ વ્યુપોર્ટની ટોચ પર સ્તરવાળા ફિક્સ્ડ-પોઝિશન એલિમેન્ટ વિશે સ્વાભાવિક રીતે જાણતું નથી. આ સરળ સંઘર્ષે વર્ષોના સર્જનાત્મક ઉપાયો તરફ દોરી છે.
જૂના હેક્સ: સ્મૃતિઓની સફર
`scroll-margin` ની સુંદરતાને ખરેખર સમજવા માટે, આપણે આ સમસ્યાને ઉકેલવા માટે જે 'જૂની રીતો'નો ઉપયોગ કરતા હતા તેને સમજવું મદદરૂપ છે. આ પદ્ધતિઓ આજે પણ વેબ પર અસંખ્ય કોડબેઝમાં અસ્તિત્વમાં છે, અને તેમને ઓળખવું કોઈપણ ડેવલપર માટે ઉપયોગી છે.
હેક #1: પેડિંગ અને નેગેટિવ માર્જિનની યુક્તિ
આ સૌથી જૂના અને સૌથી સામાન્ય CSS-ફક્ત ઉપાયોમાંનો એક હતો. વિચાર એ છે કે જગ્યા બનાવવા માટે ટાર્ગેટ એલિમેન્ટની ટોચ પર પેડિંગ ઉમેરવું, અને પછી એલિમેન્ટની સામગ્રીને તેની મૂળ દ્રશ્ય સ્થિતિમાં પાછી ખેંચવા માટે નેગેટિવ માર્જિનનો ઉપયોગ કરવો.
ઉદાહરણ કોડ:
CSS
.sticky-header { height: 80px; position: sticky; top: 0; }
h2[id] {
padding-top: 80px; /* હેડરની ઊંચાઈ જેટલી જગ્યા બનાવો */
margin-top: -80px; /* એલિમેન્ટની સામગ્રીને પાછી ઉપર ખેંચો */
}
આ શા માટે એક હેક છે:
- બોક્સ મોડેલમાં ફેરફાર કરે છે: આ સીધા જ એલિમેન્ટના લેઆઉટને બિન-સાહજિક રીતે ફેરવે છે. વધારાનું પેડિંગ બેકગ્રાઉન્ડ કલર્સ, બોર્ડર્સ અને એલિમેન્ટ પર લાગુ અન્ય સ્ટાઇલિંગમાં દખલ કરી શકે છે.
- નાજુક: તે હેડરની ઊંચાઈ અને ટાર્ગેટ એલિમેન્ટની સ્ટાઇલિંગ વચ્ચે એક મજબૂત જોડાણ બનાવે છે. જો કોઈ ડિઝાઇનર હેડરની ઊંચાઈ બદલવાનું નક્કી કરે, તો ડેવલપરે આ પેડિંગ/માર્જિન નિયમને જ્યાં પણ વપરાયો હોય ત્યાં શોધીને અપડેટ કરવાનું યાદ રાખવું પડશે.
- નોન-સિમેન્ટિક: પેડિંગ અને માર્જિન સંપૂર્ણપણે યાંત્રિક સ્ક્રોલિંગ હેતુ માટે અસ્તિત્વમાં છે, કોઈપણ સાચા લેઆઉટ અથવા ડિઝાઇન કારણોસર નહીં, જે કોડ વિશે તર્ક કરવાનું વધુ મુશ્કેલ બનાવે છે.
હેક #2: સ્યુડો-એલિમેન્ટની યુક્તિ
એક થોડો વધુ આધુનિક CSS-ફક્ત અભિગમ ટાર્ગેટ પર સ્યુડો-એલિમેન્ટ (`::before`) નો ઉપયોગ કરવાનો છે. સ્યુડો-એલિમેન્ટ વાસ્તવિક એલિમેન્ટની ઉપર સ્થિત હોય છે અને અદ્રશ્ય સ્ક્રોલ ટાર્ગેટ તરીકે કાર્ય કરે છે.
ઉદાહરણ કોડ:
CSS
h2[id] {
position: relative;
}
h2[id]::before {
content: "";
display: block;
height: 90px; /* હેડરની ઊંચાઈ + થોડી શ્વાસ લેવાની જગ્યા */
margin-top: -90px;
visibility: hidden;
}
આ શા માટે એક હેક છે:
- વધુ જટિલ: આ હોશિયાર છે, પરંતુ તે જટિલતા ઉમેરે છે અને જે ડેવલપર્સ આ પેટર્નથી અજાણ છે તેમના માટે ઓછું સ્પષ્ટ છે.
- સ્યુડો-એલિમેન્ટનો વપરાશ કરે છે: તે `::before` સ્યુડો-એલિમેન્ટનો ઉપયોગ કરે છે, જે તે જ એલિમેન્ટ પર અન્ય સુશોભન અથવા કાર્યાત્મક હેતુઓ માટે જરૂરી હોઈ શકે છે.
- હજુ પણ એક હેક છે: જ્યારે તે ટાર્ગેટ એલિમેન્ટના સીધા બોક્સ મોડેલ સાથે ચેડાં કરવાનું ટાળે છે, તે હજુ પણ એક ઉપાય છે જે CSS પ્રોપર્ટીઝનો તેમના ઉદ્દેશ્ય હેતુ સિવાય અન્ય કોઈ વસ્તુ માટે ઉપયોગ કરે છે.
હેક #3: જાવાસ્ક્રિપ્ટ હસ્તક્ષેપ
અંતિમ નિયંત્રણ માટે, ઘણા ડેવલપર્સે જાવાસ્ક્રિપ્ટનો આશરો લીધો. સ્ક્રિપ્ટ તમામ એન્કર લિંક્સ પર ક્લિક ઇવેન્ટને હાઇજેક કરશે, ડિફોલ્ટ બ્રાઉઝર જમ્પને અટકાવશે, હેડરની ઊંચાઈની ગણતરી કરશે અને પછી પેજને મેન્યુઅલી યોગ્ય સ્થિતિમાં સ્ક્રોલ કરશે.
ઉદાહરણ કોડ (કાલ્પનિક):
JavaScript
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const headerHeight = document.querySelector('.sticky-header').offsetHeight;
const targetElement = document.querySelector(this.getAttribute('href'));
if (targetElement) {
const elementPosition = targetElement.getBoundingClientRect().top;
const offsetPosition = elementPosition + window.pageYOffset - headerHeight;
window.scrollTo({
top: offsetPosition,
behavior: 'smooth'
});
}
});
});
આ શા માટે એક હેક છે:
- જરૂર કરતાં વધુ: તે એક શક્તિશાળી સ્ક્રિપ્ટીંગ ભાષાનો ઉપયોગ કરે છે જે મૂળભૂત રીતે લેઆઉટ અને પ્રેઝન્ટેશનની સમસ્યા છે તેને ઉકેલવા માટે.
- પર્ફોર્મન્સ ખર્ચ: જ્યારે ઘણીવાર નહિવત્ હોય છે, તે પેજ પર જાવાસ્ક્રિપ્ટ એક્ઝેક્યુશન ઓવરહેડ ઉમેરે છે.
- નાજુકતા: જો ક્લાસના નામો બદલાય તો સ્ક્રિપ્ટ તૂટી શકે છે. તે કદાચ એવા હેડર્સ માટે જવાબદાર ન હોય જે ગતિશીલ રીતે ઊંચાઈ બદલે છે (દા.ત., વિન્ડો રિસાઇઝ પર) વધારાના, વધુ જટિલ કોડ વિના.
- એક્સેસિબિલિટી ચિંતાઓ: જો કાળજીપૂર્વક અમલમાં ન મૂકવામાં આવે, તો તે એક્સેસિબિલિટી ટૂલ્સ અને કીબોર્ડ નેવિગેશન માટે અપેક્ષિત બ્રાઉઝર વર્તનમાં દખલ કરી શકે છે. જો જાવાસ્ક્રિપ્ટ અક્ષમ હોય અથવા લોડ થવામાં નિષ્ફળ જાય તો તે સંપૂર્ણપણે નિષ્ફળ જાય છે.
આધુનિક ઉપાય: `scroll-margin` નો પરિચય
`scroll-margin` દાખલ કરો. આ CSS પ્રોપર્ટી (અને તેના લોંગહેન્ડ વેરિઅન્ટ્સ) ખાસ કરીને આ પ્રકારની સમસ્યાઓ માટે બનાવવામાં આવી હતી. તે તમને એલિમેન્ટની આસપાસ એક આઉટસેટ માર્જિન વ્યાખ્યાયિત કરવાની મંજૂરી આપે છે જેનો ઉપયોગ સ્ક્રોલ સ્નેપિંગ વિસ્તારને સમાયોજિત કરવા માટે થાય છે.
તેને એક અદ્રશ્ય બફર ઝોન તરીકે વિચારો. જ્યારે બ્રાઉઝરને કોઈ એલિમેન્ટ પર સ્ક્રોલ કરવાની સૂચના આપવામાં આવે છે (ઉદાહરણ તરીકે, એન્કર લિંક દ્વારા), ત્યારે તે એલિમેન્ટના બોર્ડર-બોક્સને વ્યુપોર્ટની ધાર સાથે સંરેખિત કરતું નથી. તેના બદલે, તે `scroll-margin` વિસ્તારને સંરેખિત કરે છે. આનો અર્થ એ છે કે વાસ્તવિક એલિમેન્ટ નીચે ધકેલાય છે, સ્ટીકી હેડરની નીચેથી બહાર, તેના લેઆઉટને કોઈપણ રીતે અસર કર્યા વિના.
શોનો સ્ટાર: `scroll-margin-top`
આપણી સ્ટીકી હેડર સમસ્યા માટે, સૌથી સીધી અને ઉપયોગી પ્રોપર્ટી `scroll-margin-top` છે. તે એલિમેન્ટની ઉપરની ધાર માટે ખાસ ઓફસેટ વ્યાખ્યાયિત કરે છે.
ચાલો આપણા અગાઉના દૃશ્યને આ આધુનિક, સુંદર ઉકેલનો ઉપયોગ કરીને રિફેક્ટર કરીએ. હવે કોઈ નેગેટિવ માર્જિન નહીં, કોઈ સ્યુડો-એલિમેન્ટ્સ નહીં, કોઈ જાવાસ્ક્રિપ્ટ નહીં.
ઉદાહરણ કોડ:
HTML
<header class="site-header">... તમારું નેવિગેશન ...</header>
<main>
<h2 id="section-one">વિભાગ એક</h2>
<p>પ્રથમ વિભાગ માટે સામગ્રી...</p>
<h2 id="section-two">વિભાગ બે</h2>
<p>બીજા વિભાગ માટે સામગ્રી...</p>
</main>
CSS
.site-header {
position: sticky;
top: 0;
height: 80px;
background-color: white;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
/* જાદુઈ લાઇન! */
h2[id] {
scroll-margin-top: 90px; /* હેડરની ઊંચાઈ (80px) + 10px શ્વાસ લેવાની જગ્યા */
}
બસ એટલું જ. તે સ્વચ્છ, ઘોષણાત્મક અને સ્વ-દસ્તાવેજીકરણ CSS ની એક લાઇન છે. જ્યારે કોઈ યુઝર `#section-one` ની લિંક પર ક્લિક કરે છે, ત્યારે બ્રાઉઝર ત્યાં સુધી સ્ક્રોલ કરે છે જ્યાં સુધી `
` ની 90 પિક્સેલ *ઉપરનો* બિંદુ વ્યુપોર્ટની ટોચ સાથે ન મળે. આ તમારા 80-પિક્સેલ હેડરની નીચે હેડિંગને સંપૂર્ણ રીતે દૃશ્યમાન છોડી દે છે, જેમાં 10 પિક્સેલ્સની આરામદાયક વધારાની જગ્યા હોય છે.
લાભો તરત જ સ્પષ્ટ છે:
- ચિંતાનું વિભાજન: સ્ક્રોલિંગ વર્તન જ્યાં હોવું જોઈએ ત્યાં વ્યાખ્યાયિત થયેલ છે — CSS માં — જાવાસ્ક્રિપ્ટ પર આધાર રાખ્યા વિના. એલિમેન્ટના લેઆઉટ પર કોઈ અસર થતી નથી.
- સરળતા અને વાંચનીયતા: `scroll-margin-top` પ્રોપર્ટી તે જે કરે છે તેનું સંપૂર્ણ વર્ણન કરે છે. આ કોડ વાંચનાર કોઈપણ ડેવલપર તરત જ તેનો હેતુ સમજી જશે.
- મજબૂતાઈ: તે સમસ્યાને હેન્ડલ કરવાની પ્લેટફોર્મ-મૂળ રીત છે, જે તેને કોઈપણ સ્ક્રિપ્ટેડ સોલ્યુશન કરતાં વધુ કાર્યક્ષમ અને વિશ્વસનીય બનાવે છે.
- જાળવણીક્ષમતા: તે જૂના હેક્સ કરતાં મેનેજ કરવું ઘણું સરળ છે. આપણે તેને CSS કસ્ટમ પ્રોપર્ટીઝ સાથે વધુ સુધારી શકીએ છીએ, જેને આપણે ટૂંક સમયમાં આવરી લઈશું.
`scroll-margin` પ્રોપર્ટીઝનો ઊંડાણપૂર્વક અભ્યાસ
જ્યારે સ્ટીકી હેડર સમસ્યા માટે `scroll-margin-top` સૌથી સામાન્ય હીરો છે, ત્યારે `scroll-margin` પરિવાર તેના કરતાં વધુ બહુમુખી છે. તે તેની રચનામાં પરિચિત `margin` પ્રોપર્ટી જેવું જ છે.
લોંગહેન્ડ અને શોર્ટહેન્ડ પ્રોપર્ટીઝ
`margin` ની જેમ, તમે પ્રોપર્ટીઝને વ્યક્તિગત રીતે અથવા શોર્ટહેન્ડ સાથે સેટ કરી શકો છો:
scroll-margin-top
scroll-margin-right
scroll-margin-bottom
scroll-margin-left
અને શોર્ટહેન્ડ પ્રોપર્ટી, `scroll-margin`, જે `margin` જેવી જ એક-થી-ચાર મૂલ્ય સિન્ટેક્સને અનુસરે છે:
CSS
.target-element {
/* top | right | bottom | left */
scroll-margin: 90px 20px 20px 20px;
/* આના સમકક્ષ: */
scroll-margin-top: 90px;
scroll-margin-right: 20px;
scroll-margin-bottom: 20px;
scroll-margin-left: 20px;
}
આ અન્ય પ્રોપર્ટીઝ વધુ અદ્યતન સ્ક્રોલિંગ ઇન્ટરફેસમાં ખાસ કરીને ઉપયોગી છે, જેમ કે ફુલ-પેજ સ્ક્રોલ-સ્નેપિંગ કેરોયુઝલ્સ, જ્યાં તમે ખાતરી કરવા માંગી શકો છો કે સ્ક્રોલ કરેલી આઇટમ તેના કન્ટેનરની કિનારીઓ સાથે ક્યારેય સંપૂર્ણપણે ફ્લશ ન હોય.
વૈશ્વિક સ્તરે વિચારવું: લોજિકલ પ્રોપર્ટીઝ
ખરેખર વૈશ્વિક-તૈયાર CSS લખવા માટે, જ્યાં શક્ય હોય ત્યાં ભૌતિક પ્રોપર્ટીઝને બદલે લોજિકલ પ્રોપર્ટીઝનો ઉપયોગ કરવો શ્રેષ્ઠ પ્રથા છે. લોજિકલ પ્રોપર્ટીઝ ભૌતિક દિશાઓ (`top`, `left`, `right`, `bottom`) ને બદલે ટેક્સ્ટના પ્રવાહ (`start` અને `end`) પર આધારિત છે. આ સુનિશ્ચિત કરે છે કે તમારું લેઆઉટ અરબી અથવા હિબ્રુ જેવી જમણે-થી-ડાબે (RTL) ભાષાઓ અથવા તો ઊભી લેખન મોડ્સ જેવી વિવિધ લેખન મોડ્સને યોગ્ય રીતે અનુકૂલિત કરે છે.
`scroll-margin` પરિવાર પાસે લોજિકલ પ્રોપર્ટીઝનો સંપૂર્ણ સેટ છે:
scroll-margin-block-start
: એક પ્રમાણભૂત આડી, ઉપર-થી-નીચે લેખન મોડમાં `scroll-margin-top` ને અનુરૂપ છે.scroll-margin-block-end
: `scroll-margin-bottom` ને અનુરૂપ છે.scroll-margin-inline-start
: ડાબે-થી-જમણે સંદર્ભમાં `scroll-margin-left` ને અનુરૂપ છે.scroll-margin-inline-end
: ડાબે-થી-જમણે સંદર્ભમાં `scroll-margin-right` ને અનુરૂપ છે.
આપણા સ્ટીકી હેડર ઉદાહરણ માટે, લોજિકલ પ્રોપર્ટીનો ઉપયોગ વધુ મજબૂત અને ભવિષ્ય-પ્રૂફ છે:
CSS
h2[id] {
/* આ આધુનિક, પસંદગીની રીત છે */
scroll-margin-block-start: 90px;
}
આ એક ફેરફાર તમારા સ્ક્રોલિંગ વર્તનને દસ્તાવેજની ભાષા અને ટેક્સ્ટ દિશાને ધ્યાનમાં લીધા વિના આપમેળે સાચું બનાવે છે. તે એક નાની વિગત છે જે વૈશ્વિક પ્રેક્ષકો માટે નિર્માણ કરવાની પ્રતિબદ્ધતા દર્શાવે છે.
પોલિશ્ડ UX માટે સ્મૂધ સ્ક્રોલિંગ સાથે સંયોજન
`scroll-margin` પ્રોપર્ટી અન્ય આધુનિક CSS પ્રોપર્ટી `scroll-behavior` સાથે સુંદર રીતે કામ કરે છે. રુટ એલિમેન્ટ પર `scroll-behavior: smooth;` સેટ કરીને, તમે બ્રાઉઝરને તેની એન્કર લિંક જમ્પ્સને તરત જ સ્નેપ કરવાને બદલે એનિમેટ કરવા માટે કહો છો.
જ્યારે તમે બંનેને જોડો છો, ત્યારે તમને ફક્ત થોડીક લાઇન્સ CSS સાથે એક વ્યાવસાયિક, પોલિશ્ડ યુઝર એક્સપિરિયન્સ મળે છે:
CSS
html {
scroll-behavior: smooth;
}
.site-header {
position: sticky;
top: 0;
height: 80px;
}
[id] {
/* સંભવિત સ્ક્રોલ ટાર્ગેટ બનાવવા માટે ID વાળા કોઈપણ એલિમેન્ટ પર લાગુ કરો */
scroll-margin-top: 90px;
}
આ સેટઅપ સાથે, એન્કર લિંક પર ક્લિક કરવાથી એક સુંદર સ્ક્રોલ ટ્રિગર થાય છે જે સ્ટીકી હેડરની નીચે ટાર્ગેટ એલિમેન્ટ સંપૂર્ણપણે સ્થિત અને દૃશ્યમાન થવા સાથે સમાપ્ત થાય છે. કોઈ જાવાસ્ક્રિપ્ટ લાઇબ્રેરીની જરૂર નથી.
વ્યવહારુ વિચારણાઓ અને એજ કેસો
જ્યારે `scroll-margin` શક્તિશાળી છે, ત્યારે તમારા અમલીકરણને વધુ મજબૂત બનાવવા માટે અહીં કેટલીક વાસ્તવિક-દુનિયાની વિચારણાઓ છે.
CSS કસ્ટમ પ્રોપર્ટીઝ સાથે ડાયનેમિક હેડરની ઊંચાઈનું સંચાલન
`80px` જેવા પિક્સેલ મૂલ્યોને હાર્ડ-કોડ કરવું એ જાળવણીના માથાના દુખાવાનો એક સામાન્ય સ્ત્રોત છે. જો વિવિધ સ્ક્રીન કદ પર હેડરની ઊંચાઈ બદલાય તો શું થાય? અથવા જો તેની ઉપર કોઈ બેનર ઉમેરવામાં આવે તો? તમારે ઊંચાઈ અને `scroll-margin-top` મૂલ્યને બહુવિધ સ્થળોએ અપડેટ કરવાની જરૂર પડશે.
ઉપાય CSS કસ્ટમ પ્રોપર્ટીઝ (વેરિયેબલ્સ) નો ઉપયોગ કરવાનો છે. હેડરની ઊંચાઈને વેરિયેબલ તરીકે વ્યાખ્યાયિત કરીને, આપણે તેને હેડરની સ્ટાઇલ અને ટાર્ગેટના સ્ક્રોલ માર્જિન બંનેમાં સંદર્ભિત કરી શકીએ છીએ.
CSS
:root {
--header-height: 80px;
--scroll-padding: 1rem; /* સ્પેસિંગ માટે સંબંધિત એકમનો ઉપયોગ કરો */
}
/* રિસ્પોન્સિવ હેડર ઊંચાઈ */
@media (max-width: 768px) {
:root {
--header-height: 60px;
}
}
.site-header {
position: sticky;
top: 0;
height: var(--header-height);
}
[id] {
scroll-margin-top: calc(var(--header-height) + var(--scroll-padding));
}
આ અભિગમ અતિ શક્તિશાળી છે. હવે, જો તમારે ક્યારેય હેડરની ઊંચાઈ બદલવાની જરૂર હોય, તો તમારે ફક્ત એક જ જગ્યાએ `--header-height` વેરિયેબલને અપડેટ કરવાની જરૂર છે. `scroll-margin-top` આપમેળે અપડેટ થશે, મીડિયા ક્વેરીઝના પ્રતિભાવમાં પણ. આ DRY (Don't Repeat Yourself), જાળવી શકાય તેવી CSS લખવાનું પ્રતિક છે.
બ્રાઉઝર સપોર્ટ
`scroll-margin` વિશેના શ્રેષ્ઠ સમાચાર એ છે કે તેનો સમય આવી ગયો છે. આજની તારીખે, તે Chrome, Firefox, Safari અને Edge સહિત તમામ આધુનિક, એવરગ્રીન બ્રાઉઝર્સમાં સપોર્ટેડ છે. આનો અર્થ એ છે કે વૈશ્વિક પ્રેક્ષકોને લક્ષ્યાંકિત કરતા મોટાભાગના પ્રોજેક્ટ્સ માટે, તમે આ પ્રોપર્ટીનો વિશ્વાસ સાથે ઉપયોગ કરી શકો છો.
જે પ્રોજેક્ટ્સને ખૂબ જૂના બ્રાઉઝર્સ (જેમ કે ઇન્ટરનેટ એક્સપ્લોરર 11) માટે સપોર્ટની જરૂર હોય છે, તેમના માટે `scroll-margin` કામ કરશે નહીં. આવા કિસ્સાઓમાં, તમારે ફોલબેક તરીકે જૂના હેક્સમાંથી એકનો ઉપયોગ કરવાની જરૂર પડી શકે છે. તમે સક્ષમ બ્રાઉઝર્સ માટે આધુનિક પ્રોપર્ટી અને અન્ય માટે હેક લાગુ કરવા માટે CSS `@supports` ક્વેરીનો ઉપયોગ કરી શકો છો:
CSS
/* લેગસી બ્રાઉઝર્સ માટે જૂનો હેક */
[id] {
padding-top: 90px;
margin-top: -90px;
}
/* સપોર્ટેડ બ્રાઉઝર્સ માટે આધુનિક પ્રોપર્ટી */
@supports (scroll-margin-top: 1px) {
[id] {
/* પ્રથમ, જૂનો હેક રદ કરો */
padding-top: 0;
margin-top: 0;
/* પછી, વધુ સારો ઉપાય લાગુ કરો */
scroll-margin-top: 90px;
}
}
જો કે, લેગસી બ્રાઉઝર્સના ઘટાડાને જોતાં, આધુનિક પ્રોપર્ટીઝ સાથે પ્રથમ નિર્માણ કરવું અને પ્રોજેક્ટની મર્યાદાઓ દ્વારા સ્પષ્ટપણે જરૂરી હોય ત્યારે જ ફોલબેક્સનો વિચાર કરવો વધુ વ્યવહારુ છે.
એક્સેસિબિલિટીની જીત
`scroll-margin` નો ઉપયોગ કરવો માત્ર ડેવલપરની સુવિધા નથી; તે એક્સેસિબિલિટી માટે એક નોંધપાત્ર જીત છે. જ્યારે યુઝર્સ કીબોર્ડનો ઉપયોગ કરીને પેજ નેવિગેટ કરે છે (ઉદાહરણ તરીકે, લિંક્સ દ્વારા ટેબિંગ કરીને અને ઇન-પેજ એન્કર પર એન્ટર દબાવીને), ત્યારે બ્રાઉઝરનું સ્ક્રોલિંગ ટ્રિગર થાય છે. ટાર્ગેટ હેડિંગ છુપાયેલું નથી તેની ખાતરી કરીને, તમે આ યુઝર્સને નિર્ણાયક સંદર્ભ પ્રદાન કરો છો.
તેવી જ રીતે, જ્યારે કોઈ સ્ક્રીન રીડર યુઝર એન્કર લિંકને સક્રિય કરે છે, ત્યારે ફોકસનું દ્રશ્ય સ્થાન જે જાહેરાત કરવામાં આવી રહી છે તેની સાથે મેળ ખાય છે, જે આંશિક દૃષ્ટિ ધરાવતા યુઝર્સ માટે સંભવિત મૂંઝવણ ઘટાડે છે. તે સિદ્ધાંતને સમર્થન આપે છે કે તમામ ઇન્ટરેક્ટિવ તત્વો અને તેમની પરિણામી ક્રિયાઓ બધા યુઝર્સ માટે સ્પષ્ટપણે સમજી શકાય તેવી હોવી જોઈએ.
નિષ્કર્ષ: આધુનિક ધોરણને અપનાવો
સ્ટીકી હેડર્સ દ્વારા એન્કર લિંક્સ છુપાઈ જવાની સમસ્યા એવા સમયનો અવશેષ છે જ્યારે CSS પાસે તેને ઉકેલવા માટે ચોક્કસ સાધનોનો અભાવ હતો. અમે જરૂરિયાતને કારણે હોશિયાર હેક્સ વિકસાવ્યા, પરંતુ તે ઉપાયો જાળવણી, જટિલતા અને પ્રદર્શનમાં ખર્ચ સાથે આવ્યા.
`scroll-margin` પ્રોપર્ટી સાથે, હવે આપણી પાસે CSS ભાષામાં એક પ્રથમ-વર્ગનો નાગરિક છે જે આ સમસ્યાને સ્વચ્છ અને અસરકારક રીતે ઉકેલવા માટે ડિઝાઇન કરાયો છે. તેને અપનાવીને, તમે ફક્ત સારો કોડ જ નથી લખી રહ્યા; તમે તમારા યુઝર્સ માટે એક સારો, વધુ અનુમાનિત અને વધુ સુલભ અનુભવ બનાવી રહ્યા છો.
તમારા મુખ્ય મુદ્દાઓ આ હોવા જોઈએ:
- સ્ક્રોલિંગ ઓફસેટ બનાવવા માટે તમારા ટાર્ગેટ એલિમેન્ટ્સ પર `scroll-margin-top` (અથવા `scroll-margin-block-start`) નો ઉપયોગ કરો.
- તમારા સ્ટીકી હેડરની ઊંચાઈ માટે સત્યનો એક જ સ્ત્રોત બનાવવા માટે તેને CSS કસ્ટમ પ્રોપર્ટીઝ સાથે જોડો, જે તમારા કોડને મજબૂત અને જાળવી શકાય તેવો બનાવે છે.
- એક પોલિશ્ડ, પ્રોફેશનલ અનુભૂતિ માટે `html` એલિમેન્ટમાં `scroll-behavior: smooth;` ઉમેરો.
- આ કાર્ય માટે પેડિંગ હેક્સ, સ્યુડો-એલિમેન્ટ્સ અથવા જાવાસ્ક્રિપ્ટનો ઉપયોગ કરવાનું બંધ કરો. વેબ પ્લેટફોર્મ દ્વારા પ્રદાન કરાયેલા આધુનિક, હેતુ-નિર્મિત ઉકેલને અપનાવો.
આગલી વખતે જ્યારે તમે સ્ટીકી હેડર અને વિષયસૂચિ સાથેનું પેજ બનાવો, ત્યારે તમારી પાસે આ કામ માટે ચોક્કસ સાધન છે. આગળ વધો અને સીમલેસ, નિરાશા-મુક્ત નેવિગેશન અનુભવો બનાવો.